/**
 * 字节格式化工具函数
 */

/**
 * 格式化字节大小为易读格式
 * @param bytes 字节数
 * @returns 格式化后的字符串
 */
export const formatBytes = (bytes: number): string => {
  if (bytes === 0) return '0 Bytes'

  const k = 1024
  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']
  const i = Math.floor(Math.log(bytes) / Math.log(k))

  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
}

/**
 * 格式化速度为易读格式
 * @param bytesPerSecond 字节/秒
 * @returns 格式化后的速度字符串
 */
export const formatSpeed = (bytesPerSecond: number): string => {
  if (bytesPerSecond === 0) return '0 B/s'

  const k = 1024
  const sizes = ['B/s', 'KB/s', 'MB/s', 'GB/s', 'TB/s']
  const i = Math.floor(Math.log(Math.abs(bytesPerSecond)) / Math.log(k))

  return parseFloat((bytesPerSecond / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
}

/**
 * 格式化速度为易读格式（带/s后缀）
 * @param bytesPerSecond 字节/秒
 * @returns 格式化后的速度字符串
 */
export const formatSpeedWithSuffix = (bytesPerSecond: number): string => {
  return formatBytes(bytesPerSecond) + '/s'
}
